package com.cencat.framework.file.vo;

import lombok.Data;

import java.time.LocalDateTime;

/**
 * 文件信息视图对象
 */
@Data
public class FileInfoVO {
    
    /**
     * 文件ID
     */
    private Long id;
    
    /**
     * 文件唯一标识
     */
    private String fileKey;
    
    /**
     * 文件名称
     */
    private String fileName;
    
    /**
     * 文件大小（字节）
     */
    private Long fileSize;
    
    /**
     * 文件类型
     */
    private String fileType;
    
    /**
     * MIME类型
     */
    private String mimeType;
    
    /**
     * 文件扩展名
     */
    private String fileExtension;
    
    /**
     * 存储URL
     */
    private String storageUrl;
    
    /**
     * MD5哈希值
     */
    private String md5Hash;
    
    /**
     * 业务模块
     */
    private String businessModule;
    
    /**
     * 业务ID
     */
    private String businessId;
    
    /**
     * 访问级别：1-公开 2-部门 3-私有
     */
    private Integer accessLevel;
    
    /**
     * 状态：0-删除 1-正常
     */
    private Integer status;
    
    /**
     * 是否临时文件
     */
    private Boolean isTemporary;
    
    /**
     * 过期时间
     */
    private LocalDateTime expireTime;
    
    /**
     * 上传人ID
     */
    private Long uploaderId;
    
    /**
     * 上传人姓名
     */
    private String uploaderName;
    
    /**
     * 创建时间
     */
    private LocalDateTime createTime;
    
    /**
     * 更新时间
     */
    private LocalDateTime updateTime;
    
    /**
     * 文件大小格式化显示
     */
    public String getFileSizeDisplay() {
        if (fileSize == null) {
            return "0 B";
        }
        
        if (fileSize < 1024) {
            return fileSize + " B";
        } else if (fileSize < 1024 * 1024) {
            return String.format("%.2f KB", fileSize / 1024.0);
        } else if (fileSize < 1024 * 1024 * 1024) {
            return String.format("%.2f MB", fileSize / (1024.0 * 1024.0));
        } else {
            return String.format("%.2f GB", fileSize / (1024.0 * 1024.0 * 1024.0));
        }
    }
    
    /**
     * 获取文件图标
     */
    public String getFileIcon() {
        if (fileType == null) {
            return "file-unknown";
        }
        
        switch (fileType.toLowerCase()) {
            case "pdf":
                return "file-pdf";
            case "doc":
            case "docx":
                return "file-word";
            case "xls":
            case "xlsx":
                return "file-excel";
            case "ppt":
            case "pptx":
                return "file-powerpoint";
            case "jpg":
            case "jpeg":
            case "png":
            case "gif":
            case "bmp":
                return "file-image";
            case "mp4":
            case "avi":
            case "mov":
            case "wmv":
                return "file-video";
            case "mp3":
            case "wav":
            case "flac":
                return "file-audio";
            case "zip":
            case "rar":
            case "7z":
                return "file-archive";
            case "txt":
            case "log":
                return "file-text";
            default:
                return "file-unknown";
        }
    }
}